Query এবং Filter ব্যবহার

Java Technologies - জাভা মঙ্গোডিবি (Java MongoDB)
157

MongoDB একটি NoSQL ডাটাবেস যা JSON মত ডেটা স্টোর করে এবং এটি Java সহ অনেক প্রোগ্রামিং ভাষায় ডেটা ম্যানিপুলেট করার জন্য সরঞ্জাম প্রদান করে। MongoDB-তে ডেটা কোয়েরি (Query) এবং ফিল্টারিং করার জন্য MongoDB Java Driver ব্যবহার করা হয়।

MongoDB-তে query এবং filter ব্যবহৃত হয় ডেটা এক্সট্র্যাক্ট, অনুসন্ধান এবং ফিল্টার করার জন্য। Java-তে MongoDB ডাটাবেসের সাথে কাজ করার জন্য MongoClient, MongoDatabase, MongoCollection, এবং FindIterable ইন্টারফেস ব্যবহার করা হয়।

এখানে MongoDB-তে query এবং filter ব্যবহার করার একটি বিস্তারিত ব্যাখ্যা দেয়া হলো।


1. MongoDB Query এবং Filter কী?

  • Query: MongoDB ডাটাবেসের মধ্যে একটি নির্দিষ্ট ডকুমেন্ট বা ডকুমেন্টগুলির সেট খোঁজার জন্য Query ব্যবহৃত হয়। এটি সাধারণত find() মেথডের মাধ্যমে করা হয়।
  • Filter: ফিল্টার কন্ডিশনগুলোকে চিহ্নিত করে, যা কেবল সেই ডেটা ফেরত দেয় যা নির্দিষ্ট শর্তের সাথে মেলে।

2. MongoDB Query এবং Filter এর কাজের প্রক্রিয়া

MongoDB-তে একটি query তৈরি করা হয় JSON-like স্ট্রাকচার ব্যবহার করে, যেখানে আপনি কন্ডিশন দিতে পারেন যেমন:

  • ফিল্ডের মানের সাথে তুলনা
  • মান সমান হতে হবে বা বড় / ছোট হতে হবে
  • ইনক্লুড বা এক্সক্লুড করা
  • লজিকাল অপারেটর (যেমন AND, OR) ব্যবহার করা

MongoDB Query ব্যবহার উদাহরণ (Java MongoDB)

MongoDB Query (Basic Find Operation):

MongoDB-তে query করতে MongoCollection এর find() মেথড ব্যবহার করা হয়। এটি সমস্ত ডকুমেন্ট বা একটি নির্দিষ্ট ডকুমেন্ট ফেরত দেয় যা কন্ডিশনের সাথে মেলে।

Basic Find Query:

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class MongoDBQueryExample {
    public static void main(String[] args) {
        MongoClient client = new MongoClient("localhost", 27017);  // MongoDB সার্ভারে কানেক্ট
        MongoDatabase database = client.getDatabase("testDB");  // ডাটাবেস নির্বাচন

        MongoCollection<Document> collection = database.getCollection("users");  // কালেকশন নির্বাচন

        // সাধারণ query - সমস্ত ডকুমেন্ট সংগ্রহ
        for (Document doc : collection.find()) {
            System.out.println(doc.toJson());
        }

        client.close();  // কানেকশন বন্ধ
    }
}

ব্যাখ্যা:

  • find() মেথড ব্যবহার করে সমস্ত ডকুমেন্ট কুয়েরি করা হচ্ছে।

3. Filter ব্যবহার করে Query (Conditional Query)

MongoDB-তে filter ব্যবহার করে আপনি কন্ডিশনাল কুয়েরি করতে পারেন। ফিল্টারিং করার জন্য Filters ব্যবহার করা হয়, যা MongoDB Java Driver এর অংশ।

Example: Filter by Specific Field Value

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import org.bson.Document;

public class MongoDBFilterExample {
    public static void main(String[] args) {
        MongoClient client = new MongoClient("localhost", 27017);
        MongoDatabase database = client.getDatabase("testDB");

        MongoCollection<Document> collection = database.getCollection("users");

        // Filter: Find documents where the 'age' field is greater than 25
        for (Document doc : collection.find(Filters.gt("age", 25))) {
            System.out.println(doc.toJson());
        }

        client.close();
    }
}

ব্যাখ্যা:

  • Filters.gt("age", 25) এখানে gt (greater than) ফিল্টার ব্যবহার করা হয়েছে, যা age ফিল্ডের মান ২৫ এর চেয়ে বড় ডকুমেন্টগুলি খুঁজে বের করবে।

4. MongoDB Query Filters এর বিভিন্ন ধরনের ব্যবহার

MongoDB-তে ফিল্টার ব্যবহার করা যায় বিভিন্ন কন্ডিশন অনুযায়ী, যেমন:

a. Equality (সমান):

ফিল্টারটি eq() ব্যবহার করে একটি নির্দিষ্ট ফিল্ডের মানের সমান ডকুমেন্টগুলি খুঁজে বের করবে।

collection.find(Filters.eq("name", "John"));

b. Greater Than (বড় হতে হবে):

ফিল্টারটি gt() ব্যবহার করে একটি ফিল্ডের মানের বড় ডকুমেন্টগুলি খুঁজে বের করবে।

collection.find(Filters.gt("age", 30));  // age বড় হতে হবে ৩০ এর

c. Less Than (ছোট হতে হবে):

ফিল্টারটি lt() ব্যবহার করে একটি ফিল্ডের মানের ছোট ডকুমেন্টগুলি খুঁজে বের করবে।

collection.find(Filters.lt("salary", 50000));  // salary ছোট হতে হবে 50000 এর

d. Logical AND (লজিক্যাল এন্ড):

ফিল্টারটি and() ব্যবহার করে একাধিক শর্তের সম্মিলিত কুয়েরি তৈরি করবে।

collection.find(Filters.and(Filters.gt("age", 25), Filters.lt("age", 40)));

e. Logical OR (লজিক্যাল অর):

ফিল্টারটি or() ব্যবহার করে একাধিক শর্তের মধ্যে যে কোনও একটি মেলানো ডকুমেন্টগুলি খুঁজে বের করবে।

collection.find(Filters.or(Filters.eq("name", "Alice"), Filters.eq("name", "Bob")));

f. In (লিস্টের মধ্যে থাকা):

ফিল্টারটি in() ব্যবহার করে একটি নির্দিষ্ট ফিল্ডের মানে বিভিন্ন সম্ভাব্য মান চেক করবে।

collection.find(Filters.in("name", "Alice", "Bob", "Charlie"));

5. Projection (ফিল্ড নির্বাচন)

MongoDB-তে projection ব্যবহার করে আপনি কেবলমাত্র কিছু নির্দিষ্ট ফিল্ড নিয়ে আসতে পারেন, পুরো ডকুমেন্ট না নিয়ে। এটি বিশেষভাবে যখন আপনি ডেটা সাইজ কমাতে চান, তখন কার্যকরী।

collection.find(Filters.eq("name", "Alice"))
          .projection(Projections.include("name", "age"));  // শুধুমাত্র name এবং age ফিল্ড দেখানো হবে

ব্যাখ্যা:

  • Projections.include() মেথড ব্যবহার করে শুধুমাত্র নির্দিষ্ট ফিল্ডগুলি ফেরত আনা হচ্ছে।

6. Sorting (সর্টিং)

MongoDB তে sorting ফিল্টারও করা যায়। এটি ডেটাকে ascending বা descending অর্ডারে সাজাতে ব্যবহৃত হয়।

collection.find(Filters.gt("age", 25))
          .sort(Sorts.ascending("name"));  // নামের ভিত্তিতে ascending order এ সাজানো

ব্যাখ্যা:

  • Sorts.ascending() মেথড ব্যবহার করে নাম অনুযায়ী ascending সাজানো হচ্ছে।

MongoDB-তে query এবং filter ব্যবহারের মাধ্যমে আপনি ডেটাবেসে বিভিন্ন ধরনের অনুসন্ধান করতে পারেন। Java MongoDB Driver ব্যবহার করে Filters এবং Projections এর মাধ্যমে আপনি ডেটা নির্দিষ্ট শর্তে অনুসন্ধান এবং সাজাতে সক্ষম হন। এই কৌশলগুলো MongoDB তে ডেটা এক্সট্র্যাকশনের ক্ষেত্রে পারফরম্যান্স উন্নত করতে এবং কার্যকরী অনুসন্ধান কার্যক্রম পরিচালনা করতে সহায়তা করে।

Content added By

MongoDB তে Query কনসেপ্ট

141

MongoDB একটি NoSQL ডাটাবেস, যেখানে ডেটা স্টোর করা হয় ডকুমেন্ট (Document) ফরম্যাটে (যেমন, JSON বা BSON)। MongoDB-তে ডেটা অনুসন্ধান এবং রিটার্ন করার জন্য querying ব্যবহৃত হয়। MongoDB এর query গুলি খুবই শক্তিশালী এবং নমনীয়, যা সহজেই বিভিন্ন ধরণের ডেটা ফিল্টারিং, আপডেট এবং অগ্রীগেট করতে সক্ষম।

MongoDB তে query করার জন্য MongoDB Java Driver ব্যবহার করা হয়, এবং এখানে MongoCollection ক্লাসের find(), insert(), update(), এবং delete() মেথডের মাধ্যমে ডেটাবেসের উপর অপারেশন করা হয়।

এখানে MongoDB Querying Concept এর মূল বিষয়গুলো আলোচনা করা হবে:


1. MongoDB Query Structure:

MongoDB তে একটি query সাধারণত find() মেথডের মাধ্যমে করা হয়। MongoDB query গুলি মূলত BSON (Binary JSON) ডকুমেন্ট হিসেবে থাকে। এটি SQL এর মতো নয়, বরং JSON মত কিউরি ব্যবহার করা হয়।

Basic MongoDB Query:

MongoCollection<Document> collection = database.getCollection("users");
Document query = new Document("name", "John");  // Searching for name = "John"
FindIterable<Document> result = collection.find(query);

এখানে:

  • database.getCollection("users"): "users" কালেকশনটি নির্বাচন করা হচ্ছে।
  • new Document("name", "John"): এটি একটি query condition যা "name": "John" এর সাথে মেলে এমন ডকুমেন্ট খুঁজবে।

2. Querying with Find():

MongoDB তে ডেটা অনুসন্ধান করার জন্য find() মেথড ব্যবহার করা হয়। find() মেথডটি MongoDB তে ডাটাবেস থেকে ডকুমেন্ট ফিল্টার করার জন্য ব্যবহার হয়।

Example:

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import com.mongodb.MongoClient;

public class MongoDBQueryExample {
    public static void main(String[] args) {
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase database = mongoClient.getDatabase("testdb");
        MongoCollection<Document> collection = database.getCollection("users");

        // Create a query to find documents with "name" equal to "John"
        Document query = new Document("name", "John");
        
        // Find matching documents
        for (Document doc : collection.find(query)) {
            System.out.println(doc.toJson());
        }
    }
}

ব্যাখ্যা:

  • collection.find(query) কিউরি দিয়ে name = John এর সাথে মেলে এমন ডকুমেন্টগুলি পাওয়া যাবে।

Output (যদি ডকুমেন্ট থাকে):

{"_id": ObjectId("..."), "name": "John", "age": 30, "city": "New York"}

3. Query with Conditions:

MongoDB তে query করার সময় আপনি একাধিক শর্ত বা কন্ডিশন ব্যবহার করতে পারেন। উদাহরণস্বরূপ, $gt, $lt, $eq ইত্যাদি অপারেটর ব্যবহার করে সংখ্যা, তারিখ ইত্যাদির উপর শর্ত প্রয়োগ করা যায়।

Example: Query with greater than condition ($gt)

Document query = new Document("age", new Document("$gt", 25));  // age > 25
FindIterable<Document> result = collection.find(query);

Other comparison operators:

  • $eq: সমান (Equal)
  • $gt: বড় (Greater than)
  • $gte: বড় অথবা সমান (Greater than or equal)
  • $lt: ছোট (Less than)
  • $lte: ছোট অথবা সমান (Less than or equal)
  • $ne: সমান নয় (Not equal)

Example with multiple conditions:

Document query = new Document("age", new Document("$gt", 25))
                           .append("city", "New York");  // age > 25 and city = "New York"

4. Logical Operators in MongoDB Queries:

MongoDB তে logical operators ব্যবহার করে একাধিক শর্ত একসাথে প্রয়োগ করা যেতে পারে। এগুলি হল $and, $or, $not, $nor ইত্যাদি।

Example:

Document query = new Document("$or", Arrays.asList(
    new Document("age", new Document("$lt", 30)),
    new Document("city", "New York")
));

এখানে, কিউরি দুটি শর্তের মধ্যে যেকোনো একটি পূর্ণ হলে ডকুমেন্ট রিটার্ন করবে:

  1. age < 30, অথবা
  2. city = New York

5. Projection in MongoDB Query:

MongoDB তে যখন একটি query run করা হয়, তখন আপনি শুধু প্রয়োজনীয় ফিল্ডগুলি (যেমন, নির্দিষ্ট কলাম) নির্বাচন করতে পারেন। এটি projection বলে এবং এটি find() মেথডে ব্যবহার করা হয়।

Example:

Document query = new Document("name", "John");
FindIterable<Document> result = collection.find(query)
                                           .projection(new Document("name", 1).append("age", 1));

এখানে:

  • new Document("name", 1): name ফিল্ডটি রিটার্ন করবে।
  • append("age", 1): age ফিল্ডটি রিটার্ন করবে।

Output:

{"_id": ObjectId("..."), "name": "John", "age": 30}

এখানে _id ফিল্ডটি ডিফল্টভাবে রিটার্ন হবে, যদি না তা বিশেষভাবে বাদ দেওয়া হয়।


6. Sorting and Limiting Results:

MongoDB তে query করার সময় আপনি sorting এবং limiting করতে পারেন। MongoDB sort() মেথড ব্যবহার করে ডেটা সাজানো এবং limit() মেথড ব্যবহার করে রিটার্ন করা ডকুমেন্টের সংখ্যা সীমাবদ্ধ করা যায়।

Example:

Document query = new Document();
FindIterable<Document> result = collection.find(query)
                                           .sort(new Document("age", 1))  // Sorting by age in ascending order
                                           .limit(5);  // Limit to 5 documents

এখানে:

  • sort(new Document("age", 1)): এটি ডেটাগুলিকে age এর ভিত্তিতে ascending অর্ডারে সাজাবে।
  • limit(5): এটি সর্বোচ্চ 5টি ডকুমেন্ট রিটার্ন করবে।

7. Aggregation in MongoDB:

MongoDB তে aggregation framework ব্যবহার করে আপনি জটিল কুয়েরি, গ্রুপিং, এবং অন্যান্য ফাংশনালিটি করতে পারেন। এটি অনেক শক্তিশালী এবং লজিক্যাল কুয়েরি তৈরিতে সহায়তা করে।

Example: Aggregation Pipeline

List<Bson> pipeline = Arrays.asList(
    Aggregates.match(Filters.gt("age", 25)),  // Filter documents where age > 25
    Aggregates.group("$city", Accumulators.avg("avgAge", "$age"))  // Group by city and calculate avg age
);
AggregateIterable<Document> result = collection.aggregate(pipeline);

এখানে:

  • Aggregates.match(): কন্ডিশন প্রদান করে।
  • Aggregates.group(): গ্রুপিং এবং অ্যাকিউমুলেটর (যেমন avg, sum, min, max) ব্যবহার করে।

MongoDB তে querying একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা find(), update(), delete(), aggregation এবং অন্যান্য অপারেশনগুলোর মাধ্যমে ডেটাবেসে ডেটা ম্যানিপুলেট এবং অনুসন্ধান করতে ব্যবহৃত হয়। MongoDB-তে BSON ডকুমেন্ট ব্যবহার করা হয় এবং এর মাধ্যমে খুবই শক্তিশালী এবং নমনীয় কুয়েরি তৈরি করা সম্ভব। বিভিন্ন ধরনের শর্ত (comparison, logical operators), projection, sorting, limiting, এবং aggregation framework ব্যবহার করে MongoDB তে ডেটা দ্রুত এবং কার্যকরভাবে অনুসন্ধান ও ম্যানিপুলেট করা যায়।

Content added By

Simple Queries তৈরি করা (eq(), ne(), gt(), lt(), in(), nin())

142

MongoDB-তে ডেটা খোঁজার জন্য query operators ব্যবহার করা হয়। Java MongoDB ড্রাইভারও এই অপারেটরগুলিকে সমর্থন করে, এবং এগুলি ব্যবহার করে আপনি MongoDB তে বিভিন্ন query তৈরি করতে পারেন। MongoDB এর জন্য কিছু সাধারণ query operators হল:

  1. eq(): সমান
  2. ne(): সমান নয়
  3. gt(): বড়
  4. lt(): ছোট
  5. in(): মধ্যে
  6. nin(): মধ্যে নয়

এগুলি MongoDB এর query operators যেগুলি ব্যবহার করে ডকুমেন্টের মধ্যে নির্দিষ্ট মান অনুসন্ধান করা যায়। Java MongoDB ড্রাইভার ব্যবহার করে আপনি এগুলি প্রোগ্রামmatically ব্যবহার করতে পারেন।


1. MongoDB Query Operators এর জন্য Java Example

এখানে MongoDB তে বিভিন্ন query operator ব্যবহার করে ডেটা খোঁজার জন্য Java কোডের উদাহরণ দেওয়া হচ্ছে:

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import com.mongodb.client.FindIterable;

public class MongoDBQueryExample {
    public static void main(String[] args) {
        // MongoDB সার্ভারের সাথে সংযোগ স্থাপন
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase database = mongoClient.getDatabase("testdb");

        // Collection অ্যাক্সেস করা
        MongoCollection<Document> collection = database.getCollection("users");

        // eq() - সমান (Equality)
        FindIterable<Document> resultEq = collection.find(new Document("age", 30));
        System.out.println("Results for eq() (age = 30):");
        for (Document doc : resultEq) {
            System.out.println(doc.toJson());
        }

        // ne() - সমান নয় (Not Equal)
        FindIterable<Document> resultNe = collection.find(new Document("age", new Document("$ne", 30)));
        System.out.println("Results for ne() (age != 30):");
        for (Document doc : resultNe) {
            System.out.println(doc.toJson());
        }

        // gt() - বড় (Greater Than)
        FindIterable<Document> resultGt = collection.find(new Document("age", new Document("$gt", 25)));
        System.out.println("Results for gt() (age > 25):");
        for (Document doc : resultGt) {
            System.out.println(doc.toJson());
        }

        // lt() - ছোট (Less Than)
        FindIterable<Document> resultLt = collection.find(new Document("age", new Document("$lt", 30)));
        System.out.println("Results for lt() (age < 30):");
        for (Document doc : resultLt) {
            System.out.println(doc.toJson());
        }

        // in() - মধ্যে (In)
        FindIterable<Document> resultIn = collection.find(new Document("age", new Document("$in", new int[]{25, 30})));
        System.out.println("Results for in() (age in [25, 30]):");
        for (Document doc : resultIn) {
            System.out.println(doc.toJson());
        }

        // nin() - মধ্যে নয় (Not In)
        FindIterable<Document> resultNin = collection.find(new Document("age", new Document("$nin", new int[]{25, 30})));
        System.out.println("Results for nin() (age not in [25, 30]):");
        for (Document doc : resultNin) {
            System.out.println(doc.toJson());
        }

        // MongoDB সার্ভারে সংযোগ বন্ধ করা
        mongoClient.close();
    }
}

Explanation of Each Query Operator:

  1. eq() - সমান (Equality):
    • eq() অপারেটর MongoDB তে ইকুয়াল বা সমান মানের অনুসন্ধান করতে ব্যবহৃত হয়। Java-তে new Document("field", value) ব্যবহার করে এটি কার্যকর করা হয়।
    • Example: new Document("age", 30) → এটি age ফিল্ডের মান 30 এর সমান ডকুমেন্ট খুঁজে বের করবে।
  2. ne() - সমান নয় (Not Equal):
    • ne() অপারেটর MongoDB তে সমান নয় এর জন্য ব্যবহৃত হয়। Java-তে এটি $ne ব্যবহার করে লেখা হয়।
    • Example: new Document("age", new Document("$ne", 30)) → এটি age ফিল্ডের মান 30 এর সমান নয় এমন ডকুমেন্ট খুঁজে বের করবে।
  3. gt() - বড় (Greater Than):
    • gt() অপারেটর MongoDB তে বড় মানের অনুসন্ধান করতে ব্যবহৃত হয়, অর্থাৎ নির্দিষ্ট মানের চেয়ে বড় মান খোঁজা হয়। Java-তে $gt ব্যবহার করা হয়।
    • Example: new Document("age", new Document("$gt", 25)) → এটি age ফিল্ডের মান 25 এর চেয়ে বড় এমন ডকুমেন্ট খুঁজে বের করবে।
  4. lt() - ছোট (Less Than):
    • lt() অপারেটর MongoDB তে ছোট মানের অনুসন্ধান করতে ব্যবহৃত হয়। Java-তে $lt ব্যবহার করা হয়।
    • Example: new Document("age", new Document("$lt", 30)) → এটি age ফিল্ডের মান 30 এর চেয়ে ছোট এমন ডকুমেন্ট খুঁজে বের করবে।
  5. in() - মধ্যে (In):
    • in() অপারেটর MongoDB তে একটি নির্দিষ্ট মানের মধ্যে থাকা ডকুমেন্ট খুঁজতে ব্যবহৃত হয়। Java-তে $in ব্যবহার করা হয়।
    • Example: new Document("age", new Document("$in", new int[]{25, 30})) → এটি age ফিল্ডের মান যেগুলি 25 বা 30 এর মধ্যে, সেগুলি খুঁজে বের করবে।
  6. nin() - মধ্যে নয় (Not In):
    • nin() অপারেটর MongoDB তে in() এর বিপরীত, অর্থাৎ একটি নির্দিষ্ট মানের মধ্যে না থাকা ডকুমেন্ট খুঁজতে ব্যবহৃত হয়। Java-তে $nin ব্যবহার করা হয়।
    • Example: new Document("age", new Document("$nin", new int[]{25, 30})) → এটি age ফিল্ডের মান যেগুলি 25 বা 30 এর মধ্যে নয়, সেগুলি খুঁজে বের করবে।

MongoDB Query Operators Summary:

OperatorDescriptionMongoDB Query Example
eq()Equal tonew Document("age", 30)
ne()Not equal tonew Document("age", new Document("$ne", 30))
gt()Greater thannew Document("age", new Document("$gt", 25))
lt()Less thannew Document("age", new Document("$lt", 30))
in()In a set of valuesnew Document("age", new Document("$in", new int[]{25, 30}))
nin()Not in a set of valuesnew Document("age", new Document("$nin", new int[]{25, 30}))

Java MongoDB ড্রাইভার ব্যবহার করে MongoDB তে simple queries তৈরি করা সম্ভব এবং বিভিন্ন query operators যেমন eq(), ne(), gt(), lt(), in(), এবং nin() ব্যবহার করে আপনি ডেটা অনুসন্ধান করতে পারবেন। MongoDB তে বিভিন্ন ধরনের query operators এবং filter conditions ব্যবহার করে ডকুমেন্টের মধ্যে নির্দিষ্ট মান অনুসন্ধান করা যায়, যা কোড লেখার সময় খুবই কার্যকরী।

Content added By

Complex Queries এর জন্য Filters ব্যবহার

143

MongoDB-তে complex queries তৈরি করতে, বিশেষ করে যখন আপনার বিভিন্ন criteria (যেমন, AND, OR, IN, NOT, gt, lt ইত্যাদি) অনুযায়ী ডেটা ফিল্টার করতে হয়, তখন filters ব্যবহার করা হয়। MongoDB Java Driver-এ filters ব্যবহারের মাধ্যমে খুব সহজেই এসব জটিল কোয়েরি তৈরি করা সম্ভব।

MongoDB Java Driver-এ Filters ক্লাসটি একটি helper ক্লাস হিসেবে কাজ করে এবং আপনি এটি ব্যবহার করে বিভিন্ন ধরনের কোয়েরি ফিল্টার তৈরি করতে পারেন। Filters ক্লাস বিভিন্ন ধরনের ফিল্টারিং অপারেশন সরবরাহ করে যেমন eq, gt, lt, in, ne, and, or, এবং আরও অনেক কিছু।

Filters ক্লাসের ব্যবহার:

Filters ক্লাসটি MongoDB থেকে ডেটা filter করতে সাহায্য করে, যেখানে আপনি criteria এবং conditions অনুযায়ী ফিল্টার করতে পারেন।

MongoDB Filters - Commonly Used Methods:

  1. eq(): একটি নির্দিষ্ট মানের সমান মান বের করা।
  2. ne(): একটি নির্দিষ্ট মানের সমান না এমন মান বের করা।
  3. gt(): একটি নির্দিষ্ট মানের চেয়ে বড় মান বের করা।
  4. lt(): একটি নির্দিষ্ট মানের চেয়ে ছোট মান বের করা।
  5. in(): একটি নির্দিষ্ট মানের মধ্যে থাকা ডেটা বের করা।
  6. and(): একাধিক ফিল্টার শর্ত একসাথে ব্যবহার করা (AND logic)।
  7. or(): একাধিক শর্তের মধ্যে যেকোনো একটি মেলানো (OR logic)।
  8. exists(): একটি ফিল্ড যদি ডকুমেন্টে থাকে তাহলে তার মানের উপর ভিত্তি করে ফিল্টার করা।

MongoDB Filters এর উদাহরণ:

1. eq() (Equal to):

যদি আপনি MongoDB ডাটাবেস থেকে এমন ডকুমেন্ট খুঁজতে চান যেখানে কোন ফিল্ডের মান একটি নির্দিষ্ট মানের সমান।

import com.mongodb.client.*;
import com.mongodb.client.model.Filters;
import org.bson.Document;

public class FilterExample {
    public static void main(String[] args) {
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase database = mongoClient.getDatabase("testdb");
        MongoCollection<Document> collection = database.getCollection("users");

        // Filtering by "age" == 30
        FindIterable<Document> results = collection.find(Filters.eq("age", 30));
        
        for (Document doc : results) {
            System.out.println(doc.toJson());
        }
        
        mongoClient.close();
    }
}

2. gt() (Greater than):

যদি আপনি MongoDB ডাটাবেস থেকে এমন ডকুমেন্ট খুঁজতে চান যেখানে কোন ফিল্ডের মান একটি নির্দিষ্ট মানের চেয়ে বড়।

FindIterable<Document> results = collection.find(Filters.gt("age", 25));

এখানে, age 25 এর চেয়ে বড় এমন ডকুমেন্টগুলো return হবে।

3. lt() (Less than):

যদি আপনি MongoDB থেকে ডকুমেন্ট খুঁজতে চান যেখানে কোন ফিল্ডের মান একটি নির্দিষ্ট মানের চেয়ে কম।

FindIterable<Document> results = collection.find(Filters.lt("age", 40));

এখানে, age 40 এর চেয়ে কম এমন ডকুমেন্টগুলো return হবে।

4. in() (In a range or list of values):

যদি আপনি MongoDB ডাটাবেস থেকে এমন ডকুমেন্ট খুঁজতে চান যেখানে কোন ফিল্ডের মান একটি নির্দিষ্ট সেটের মধ্যে রয়েছে।

FindIterable<Document> results = collection.find(Filters.in("age", 25, 30, 35));

এখানে, age 25, 30, বা 35 যেকোনো মানের ডকুমেন্ট return করবে।

5. and() (Multiple conditions with AND logic):

যদি আপনি একাধিক শর্ত দিয়ে ডকুমেন্ট ফিল্টার করতে চান, যেখানে সব শর্ত মেনে চলতে হবে।

FindIterable<Document> results = collection.find(
    Filters.and(
        Filters.eq("age", 30),
        Filters.eq("city", "New York")
    )
);

এখানে, age 30 এবং city "New York" এই দুই শর্ত মিলে এমন ডকুমেন্টগুলো return হবে।

6. or() (Multiple conditions with OR logic):

যদি আপনি একাধিক শর্ত দিয়ে ডকুমেন্ট ফিল্টার করতে চান, যেখানে যেকোনো একটি শর্ত মিলে চলতে হবে।

FindIterable<Document> results = collection.find(
    Filters.or(
        Filters.eq("city", "New York"),
        Filters.eq("city", "Los Angeles")
    )
);

এখানে, city "New York" অথবা "Los Angeles" যেকোনো একটিতে মিলে এমন ডকুমেন্টগুলো return হবে।

7. exists() (Field existence check):

যদি আপনি এমন ডকুমেন্ট খুঁজতে চান যেখানে কোনো ফিল্ড উপস্থিত (এবং তার মান হতে পারে null বা non-null)।

FindIterable<Document> results = collection.find(Filters.exists("email", true));

এখানে, email ফিল্ডটি যেসব ডকুমেন্টে উপস্থিত, সেগুলো return হবে।


Complex Query Example:

ধরা যাক, আপনি MongoDB থেকে এমন ব্যবহারকারীদের খুঁজতে চান যারা 30 বছরের বেশি, "New York" এ বসবাস করে এবং তাদের email ফিল্ড উপস্থিত:

FindIterable<Document> results = collection.find(
    Filters.and(
        Filters.gt("age", 30),
        Filters.eq("city", "New York"),
        Filters.exists("email", true)
    )
);

for (Document doc : results) {
    System.out.println(doc.toJson());
}

এখানে, আমরা Filters.and() ব্যবহার করে একাধিক ফিল্টার প্রয়োগ করেছি যা একসাথে কাজ করবে।


MongoDB তে complex queries তৈরি করতে Filters ক্লাস খুবই উপকারী। এটি আপনাকে logical operations (যেমন and, or), range queries (যেমন gt, lt), existence checks (যেমন exists), এবং আরও অনেক শর্তের মাধ্যমে ডেটা ফিল্টার করতে সক্ষম করে। MongoDB Java Driver এর মাধ্যমে আপনি সহজে MongoDB তে ফিল্টার প্রয়োগ করে জটিল কোয়েরি পরিচালনা করতে পারেন।

Content added By

Regular Expressions এবং Text Queries

129

MongoDB, একটি NoSQL ডাটাবেস সিস্টেম, যা ডকুমেন্ট-ভিত্তিক এবং JSON (BSON) ফরম্যাটে ডেটা সংরক্ষণ করে। MongoDB-তে ডেটা অনুসন্ধান করার জন্য বিভিন্ন ধরনের কুয়েরি ব্যবহার করা যায়, এবং এর মধ্যে একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার হল Regular Expressions (RegEx) এবং Text Queries। এগুলি MongoDB-তে স্ট্রিং ভিত্তিক অনুসন্ধানের জন্য অত্যন্ত কার্যকরী।

1. Regular Expressions (RegEx) in MongoDB

Regular Expressions (RegEx) হল একটি শক্তিশালী টুল যা ব্যবহারকারীদের স্ট্রিংয়ের মধ্যে প্যাটার্ন ম্যাচিং বা অনুসন্ধান করতে সহায়তা করে। MongoDB-তে RegEx ব্যবহার করা হয় স্ট্রিংয়ের মধ্যে নির্দিষ্ট প্যাটার্ন অনুসন্ধান করতে।

RegEx কুয়েরি কিভাবে কাজ করে?

MongoDB-এর find() মেথডে $regex অপারেটর ব্যবহার করে আপনি একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে এমন ডেটা অনুসন্ধান করতে পারেন।

RegEx Syntax in MongoDB:

{
    field: { $regex: /pattern/, $options: "i" }
}
  • $regex: এটি স্ট্রিং প্যাটার্নের সাথে মেলে এমন ডকুমেন্ট অনুসন্ধান করতে ব্যবহৃত হয়।
  • $options: বিভিন্ন অপশন, যেমন i (case-insensitive), m (multiline), ইত্যাদি।

RegEx Example:

ধরা যাক, আমাদের একটি users কালেকশন আছে, এবং আমরা সেসব ব্যবহারকারীদের খুঁজতে চাই যাদের নাম "john" দিয়ে শুরু হয় (case-insensitive):

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class MongoDBRegExExample {
    public static void main(String[] args) {
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase database = mongoClient.getDatabase("testdb");
        MongoCollection<Document> collection = database.getCollection("users");

        // Create query using RegEx to find users whose name starts with 'john' (case insensitive)
        Document query = new Document("name", new Document("$regex", "^john").append("$options", "i"));
        
        // Execute query and print results
        for (Document user : collection.find(query)) {
            System.out.println(user.toJson());
        }

        mongoClient.close();
    }
}

ব্যাখ্যা:

  • এই কুয়েরি name ফিল্ডের মধ্যে "john" দিয়ে শুরু হওয়া সমস্ত ডকুমেন্ট খুঁজে বের করবে, এবং এটি case-insensitive হবে।
  • $regex প্যাটার্নের মাধ্যমে, MongoDB স্ট্রিংয়ের মধ্যে প্যাটার্নের সাথে মেলা ডকুমেন্ট ফিরিয়ে দেয়।

RegEx অপশন:

  • "i": Case-insensitive অনুসন্ধান।
  • "m": Multiline matching।
  • "x": Extended matching (spaces and comments in the regex pattern).

2. Text Queries in MongoDB

MongoDB text search সমর্থন করে, যেখানে আপনি text indexes ব্যবহার করে দ্রুত স্ট্রিং ভিত্তিক অনুসন্ধান করতে পারেন। MongoDB-তে Text Indexes তৈরি করা হয় যাতে স্ট্রিংয়ের মধ্যে শব্দ অনুসন্ধান (word search) করা যায়।

Text Indexes তৈরি করা:

Text queries করার জন্য MongoDB-তে text index তৈরি করতে হয়।

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class MongoDBTextSearchExample {
    public static void main(String[] args) {
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase database = mongoClient.getDatabase("testdb");
        MongoCollection<Document> collection = database.getCollection("articles");

        // Creating a text index on the 'content' field
        collection.createIndex(new Document("content", "text"));

        // Querying using text search
        Document query = new Document("$text", new Document("$search", "mongodb"));

        // Execute the query and print results
        for (Document article : collection.find(query)) {
            System.out.println(article.toJson());
        }

        mongoClient.close();
    }
}

ব্যাখ্যা:

  • createIndex(): content ফিল্ডে একটি text index তৈরি করা হয়েছে।
  • $text: এটি text search অপারেটর, যা MongoDB-তে ডকুমেন্টের মধ্যে নির্দিষ্ট শব্দ খুঁজে বের করতে ব্যবহৃত হয়। এখানে mongodb শব্দটি অনুসন্ধান করা হচ্ছে।
  • $search: এখানে "mongodb" শব্দটি অনুসন্ধান করা হচ্ছে।

Text Search এর কিছু সুবিধা:

  • Natural Language Processing (NLP) সমর্থন: MongoDB শব্দের মৌলিক রূপের (stem words) সাথে মেলানোর জন্য NLP ব্যবহার করে, যেমন "running" এবং "run"।
  • Multiple Words: আপনি একাধিক শব্দের অনুসন্ধান করতে পারেন এবং তাদের মধ্যে অ্যান্ড, অথবা সম্পর্ক (AND, OR) ব্যবহার করতে পারেন।
  • Phrase Searching: আপনি নির্দিষ্ট শব্দের সঠিক অর্ডারে অনুসন্ধান করতে পারেন (যেমন "MongoDB Tutorial" একটি ফ্রেজ হিসাবে)।

Text Query Example with Multiple Words:

Document query = new Document("$text", new Document("$search", "mongodb OR database"));

এখানে, mongodb অথবা database শব্দের মধ্যে যে কোনো একটি মিললেই তা রিটার্ন হবে।

Text Search with Phrase:

Document query = new Document("$text", new Document("$search", "\"MongoDB Tutorial\""));

এখানে, "MongoDB Tutorial" শব্দগুচ্ছটি সঠিকভাবে মেলানোর জন্য phrase search ব্যবহৃত হচ্ছে।


3. Combining Regular Expressions and Text Queries

MongoDB-তে Regular Expressions এবং Text Queries একসাথে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, আপনি একটি text index ব্যবহার করে একটি শব্দ অনুসন্ধান করতে পারেন এবং একটি RegEx প্যাটার্ন ব্যবহার করে সেই ফলাফলগুলির মধ্যে আরো কিছু নির্দিষ্ট ফিল্টার করতে পারেন।

Example:

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class MongoDBRegExAndTextExample {
    public static void main(String[] args) {
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase database = mongoClient.getDatabase("testdb");
        MongoCollection<Document> collection = database.getCollection("articles");

        // Creating a text index
        collection.createIndex(new Document("content", "text"));

        // Querying using both text search and RegEx
        Document query = new Document("$text", new Document("$search", "mongodb"))
                             .append("content", new Document("$regex", "tutorial").append("$options", "i"));

        // Execute the query and print results
        for (Document article : collection.find(query)) {
            System.out.println(article.toJson());
        }

        mongoClient.close();
    }
}

ব্যাখ্যা:

  • প্রথমে text index তৈরি করা হয়েছে এবং তারপর text search করা হয়েছে যেখানে "mongodb" শব্দটি অনুসন্ধান করা হচ্ছে।
  • পরে, RegEx প্যাটার্ন tutorial ব্যবহার করা হয়েছে এবং case-insensitive অপশন দেওয়া হয়েছে।

  • Regular Expressions এবং Text Queries MongoDB-তে শক্তিশালী এবং নমনীয় অনুসন্ধান প্রদান করে, যা স্ট্রিংয়ের মধ্যে প্যাটার্ন বা শব্দ খুঁজে বের করতে ব্যবহৃত হয়।
  • Regular Expressions MongoDB-তে স্ট্রিংয়ের মধ্যে নির্দিষ্ট প্যাটার্নের সাথে মেলা ডেটা অনুসন্ধান করতে সাহায্য করে।
  • Text Queries MongoDB-তে শক্তিশালী শব্দ অনুসন্ধান ব্যবস্থা প্রদান করে যা text index ব্যবহার করে বিভিন্ন ধরনের ভাষাগত অনুসন্ধান এবং শব্দ অনুসন্ধান সমর্থন করে।

এগুলি MongoDB-এর advanced search ফিচারগুলো যা অত্যন্ত উপকারী যখন আপনি বড় ডেটাবেসে টেক্সট-ভিত্তিক বা প্যাটার্ন-ভিত্তিক অনুসন্ধান করতে চান।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...